Facebookモバイルアプリ入門-AccessTokenの有効期限-
Graph APIを使う
FacebookアプリでGraph APIを用いて各種情報にアクセスする場合、AccessTokenを用いるとFacebookにログインしていない状態でも情報を取得することができます。例えば以下のような書き方をします。
https://graph.facebook.com/me/friends?access_token=XXXXXXXXXXXXXXXXXXXXXXX
AccessTokenの取得
AccessTokenを取得するには、Facebookアプリの承認を行い、Facebook APIを使って取得します。
<html> <head> <script src="https://connect.facebook.net/en_US/all.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script> </head> <body> <p><input id="AccessToken" type="text" value="" width="100%" size="100"/></p> <div id="fb-root"></div> <script type="text/javascript"> $(document).ready(function () { FB.init({ appId: '138903622884140', cookie: true, xfbml: true, status: true, oauth: true }); FB.Event.subscribe('auth.statusChange', handleStatusChange); }); function handleStatusChange(response) { document.body.className = response.authResponse ? 'connected' : 'not_connected'; if (response.authResponse) { console.log(response.authResponse); $('#AccessToken').val(response.authResponse.accessToken); } } function login(){ FB.login(function(response) { }, {scope:'email'}); } </script> </body> </html>
AccessTokenの有効期限切れ
AccessTokenの有効期限切れは、4つのシナリオが考えられます。
- 2時間を経過してセッション切れ
- パスワードの変更
- アプリの承認解除
- Facebookからのログアウト
有効期限切れのレスポンス
AccessTokenが有効期限切れになったときに返ってくるJSON文字列についてご紹介します。
2時間を経過してセッション切れ
{ error: { type: "OAuthException", message: "Session has expired at unix time SOME_TIME. The current unix time is SOME_TIME.” }, }
パスワードの変更
{ error: { type: "OAuthException", message: "The session has been invalidated because the user has changed the password.", }, }
アプリの承認解除
{ error: { type: "OAuthException", message: "Error validating access token: USER_ID has not authorized application APP_ID", }, }
Facebookからのログアウト
{ "error": { "type":"OAuthException", "message":"Error validating access token: The session is invalid because the user logged out." } }
有効期限切れの対処方法
どのエラーもOAuthExceptionですので、レスポンス文字列を比較して判別しましょう。もし、エラーだった場合は再ログインや再承認を促しましょう
まとめ
Graph APIで用いられるAccessTokenの有効期限について理解を深めました。今回はJavaScriptからのみの利用でしたが、サーバーサイドからGraph APIにアクセスする際にも同じように使えるはずです。Facebookの特性を理解してソーシャルアプリデベロッパーになりましょう!